package demo05;

import java.util.function.Function;

/*
 *  java.util.function.Function<T, R>：转换型接口
 *  default <V> Function<T, V> andThen(Function<? super R, ? extends V> after)：Function接口的默认方法，用于将两个Function对象进行组合
 *  使用andThen()方法后，调用者最后还需要调用apply()方法，确立需要操作转换的起始数据对象
 *  执行顺序为调用andThen()的Functionr对象先执行转换操作，得到结果后，andThen()参数内的Function对象将该结果执行转换
 */
public class Demo02FunctionAndThen {
    public static void main(String[] args) {
        // 调用方法时参数需要填写两个Function对象，可以填写两个Lambda表达式，确立转换的操作方式
        System.out.println(change("1000", // 字符串1000
                string -> Integer.parseInt(string), // 第一次转换结果：整型1000
                i -> (i + 24) + "")); // 第二次转换结果：字符串1024
    }

    // 执行组合操作，就需要填入两个Function对象参数
    public static String change(String string, Function<String, Integer> function1,
            Function<Integer, String> function2) {
        // function1连接function2，先执行function1转换数据，得到转换结果，再执行function2来转换function1转换得到的结果
        return function1.andThen(function2).apply(string);
    }
}
